.TH "PAPI_overflow" 3 "Thu Dec 14 2023" "Version 7.1.0.0" "PAPI" \" -*- nroff -*-
.ad l
.nh
.SH NAME
PAPI_overflow \- Set up an event set to begin registering overflows\&.  

.SH SYNOPSIS
.br
.PP
.SH "Detailed Description"
.PP 
\fBPAPI_overflow()\fP marks a specific EventCode in an EventSet to generate an overflow signal after every threshold events are counted\&. More than one event in an event set can be used to trigger overflows\&. In such cases, the user must call this function once for each overflowing event\&. To turn off overflow on a specified event, call this function with a threshold value of 0\&.
.PP
Overflows can be implemented in either software or hardware, but the scope is the entire event set\&. PAPI defaults to hardware overflow if it is available\&. In the case of software overflow, a periodic timer interrupt causes PAPI to compare the event counts against the threshold values and call the overflow handler if one or more events have exceeded their threshold\&. In the case of hardware overflow, the counters are typically set to the negative of the threshold value and count up to 0\&. This zero-crossing triggers a hardware interrupt that calls the overflow handler\&. Because of this counter interrupt, the counter values for overflowing counters may be very small or even negative numbers, and cannot be relied upon as accurate\&. In such cases the overflow handler can approximate the counts by supplying the threshold value whenever an overflow occurs\&.
.PP
_papi_overflow_handler() is a placeholder for a user-defined function to process overflow events\&. A pointer to this function is passed to the \fBPAPI_overflow\fP routine, where it is invoked whenever a software or hardware overflow occurs\&. This handler receives the EventSet of the overflowing event, the Program Counter address when the interrupt occurred, an overflow_vector that can be processed to determined which event(s) caused the overflow, and a pointer to the machine context, which can be used in a platform-specific manor to extract register information about what was happening when the overflow occurred\&.
.PP
\fBC Interface:\fP
.RS 4
#include <\fBpapi\&.h\fP> 
.br
int \fBPAPI_overflow\fP (int EventSet, int EventCode, int threshold, int flags, PAPI_overflow_handler_t handler ); 
.br

.br
(*PAPI_overflow_handler_t) _papi_overflow_handler (int EventSet, void *address, long_long overflow_vector, void *context );
.RE
.PP
\fBFortran Interface:\fP
.RS 4
Not implemented
.RE
.PP
\fBParameters\fP
.RS 4
\fIEventSet\fP -- an integer handle to a PAPI event set as created by \fBPAPI_create_eventset\fP 
.br
\fIEventCode\fP -- the preset or native event code to be set for overflow detection\&. This event must have already been added to the EventSet\&. 
.br
\fIthreshold\fP -- the overflow threshold value for this EventCode\&. 
.br
\fIflags\fP -- bitmap that controls the overflow mode of operation\&. Set to PAPI_OVERFLOW_FORCE_SW to force software overflowing, even if hardware overflow support is available\&. If hardware overflow support is available on a given system, it will be the default mode of operation\&. There are situations where it is advantageous to use software overflow instead\&. Although software overflow is inherently less accurate, with more latency and processing overhead, it does allow for overflowing on derived events, and for the accurate recording of overflowing event counts\&. These two features are typically not available with hardware overflow\&. Only one type of overflow is allowed per event set, so setting one event to hardware overflow and another to forced software overflow will result in an error being returned\&. 
.br
\fIhandler\fP -- pointer to the user supplied handler function to call upon overflow 
.br
\fIaddress\fP -- the Program Counter address at the time of the overflow 
.br
\fIoverflow_vector\fP 
.br
 -- a long long word containing flag bits to indicate which hardware counter(s) caused the overflow 
.br
\fI*context\fP -- pointer to a machine specific structure that defines the register context at the time of overflow\&. This parameter is often unused and can be ignored in the user function\&.
.RE
.PP
\fBReturn values\fP
.RS 4
\fIPAPI_OK\fP On success, \fBPAPI_overflow\fP returns PAPI_OK\&. 
.br
 
.br
\fIPAPI_EINVAL\fP One or more of the arguments is invalid\&. 
.br
 Most likely a bad threshold value\&. 
.br
\fIPAPI_ENOMEM\fP Insufficient memory to complete the operation\&. 
.br
\fIPAPI_ENOEVST\fP The EventSet specified does not exist\&. 
.br
\fIPAPI_EISRUN\fP The EventSet is currently counting events\&. 
.br
\fIPAPI_ECNFLCT\fP The underlying counter hardware cannot count this event and other events in the EventSet simultaneously\&. Also can happen if you are trying to overflow both by hardware and by forced software at the same time\&. 
.br
\fIPAPI_ENOEVNT\fP The PAPI event is not available on the underlying hardware\&.
.RE
.PP
\fBExample\fP
.RS 4

.PP
.nf
// Define a simple overflow handler:
void handler(int EventSet, void *address, long_long overflow_vector, void *context)
{
   fprintf(stderr,\\"Overflow at %p! bit=%#llx \\\\n\\",
            address,overflow_vector);
}

// Call PAPI_overflow for an EventSet containing PAPI_TOT_INS,
// setting the threshold to 100000\&. Use the handler defined above\&.
retval = PAPI_overflow(EventSet, PAPI_TOT_INS, 100000, 0, handler);

.fi
.PP
.RE
.PP
\fBSee also\fP
.RS 4
\fBPAPI_get_overflow_event_index\fP 
.RE
.PP


.SH "Author"
.PP 
Generated automatically by Doxygen for PAPI from the source code\&.
